﻿Imports MySql.Data.MySqlClient

Public Class Form2
    Const max = 100
    Dim teller As Integer
    'Matriser for matretter
    Private ingrediensNavn(max) As String
    Private antall(max) As Double
    Private enhetsmaaler(max) As String
    Private rettNavn As String

    Dim db As MySqlConnection

    Private Function Sporring(ByVal sql As String) As DataTable

        Dim tabell As New DataTable

        Try

            db.Open()

            ' Gjøre sql-spørring og fylle tabell med data

            Dim kommando As New MySqlCommand(sql, db)

            Dim da As New MySqlDataAdapter
            da.SelectCommand = kommando
            da.Fill(tabell)

            db.Close()

        Catch ex As MySqlException
            MessageBox.Show("En feil oppstått - " & ex.Message)
        End Try

        Return tabell

    End Function

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'Legger navnet på retten inn i en variabel
        If txtrettNavn.Text = Nothing Then
            MsgBox("Du må fylle inn tekst i tekstboksen")
        Else
            rettNavn = txtrettNavn.Text
            txtrettNavn.Text = ""
            'Blar frem til tabcontrol 1
            TabControl1.SelectedIndex = 1
        End If
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        'Validering sjekk for nummer
        Dim testVar As Object = txtingAntall.Text
        Dim nummerSjekk As Boolean = IsNumeric(testVar)

        'Videre validering av nummer, valgt måleenhet og ingrediensnavn
        If ComboBox1.SelectedItem = Nothing Or txtingNavn.Text = Nothing Or nummerSjekk = False Then
            MsgBox("Kontroller at alle feltene fyllt inn")
        Else
            'Informasjonen hentes fra tekstboksene
            ListiNavn.Text = txtingNavn.Text
            ListAntall.Text = txtingAntall.Text
            ListmEnhet.Text = ComboBox1.Text

            'Oppdaterer telleren for å legge til neste matrett
            teller += 1

            'Skriver ut ingrediensen
            ListiNavn.Items.Add(txtingNavn.Text)
            ListAntall.Items.Add(txtingAntall.Text)
            ListmEnhet.Items.Add(ComboBox1.Text)

            'Nullstiller tekstboksene slik at de er klare for en ny ingrediens
            txtingNavn.Text = ""
            txtingAntall.Text = ""
        End If
    End Sub

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        db = New MySqlConnection()

        db.ConnectionString = "Server= mysql.stud.aitel.hist.no;" _
            & "Database= q10;" _
            & "Uid= q10;" _
            & "Pwd= GF3.tuso;"

        Try

            db.Open()
            MessageBox.Show("Oppkoblingen var vellykket")
            db.Close()

        Catch ex As MySqlException
            MessageBox.Show("En feil oppstått - " & ex.Message)
        End Try

        '  ListiNavn.Items.Add("Navn:")
        ' ListAntall.Items.Add("Antall:")
        'ListmEnhet.Items.Add("Måleenhet:")
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        TabControl1.SelectedIndex = 1
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Dim o As Integer = 0
        Dim index As Integer
        Dim startTeller As Integer = 0

        index = ListiNavn.Items.Count
        ListBox3.Items.Clear()

        Do While o < index
            ListiNavn.SelectedIndex = o
            ListAntall.SelectedIndex = o
            ListmEnhet.SelectedIndex = o

            ingrediensNavn(o) = ListiNavn.SelectedItem
            antall(o) = ListAntall.SelectedItem
            enhetsmaaler(o) = ListmEnhet.SelectedItem

            'ListBox3.Items.Add(ingrediensNavn(o) & vbTab & antall(o) & vbTab & enhetsmaaler(o))
            o += 1
        Loop


        Dim matriseTeller As Integer
        matriseTeller = ListiNavn.Items.Count

        Do While startTeller < matriseTeller
            ListBox3.Items.Add(ingrediensNavn(startTeller) & vbTab & antall(startTeller) & vbTab & enhetsmaaler(startTeller))
            startTeller += 1
        Loop

        'Neste tabcontrol (2)
        TabControl1.SelectedIndex = 2

        'Skriver ut rettnavnet til listboks
        ListBox2.Items.Add(rettNavn)

    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click


        Try
            'åpner kobling for å gjøre klar spørring mot databasen
            db.Open()
            MessageBox.Show("Oppkoblingen var vellykket")

            'Variabler for å lagre spørringer
            Dim sporringVerdi As String
            Dim sporringMeny As String
            Dim sporringIng As String

            'Teller for løkke
            Dim i As Integer = 0
            'Teller for løkke. Antallet ingredienser som er valgt teller opp
            Dim listeTeller As Integer = ListiNavn.Items.Count
            'Variabel for å lagre rettens ID
            Dim idVariabel As String

            'Lager sentrale objekter
            'MySqlDataAdapter fungerer som en 'bro' mellom vb og MySQL for å hente og lagre data
            Dim da As New MySqlDataAdapter
            Dim interntabell As New DataTable

            'Gjør klar spørring for meny
            sporringMeny = "INSERT INTO MENY"
            sporringMeny = sporringMeny & " (meny_id, rett_navn) "
            sporringMeny = sporringMeny & " VALUES "
            sporringMeny = sporringMeny & "('', '" & rettNavn & "'); "

            'Spørringen gjøres om til en mysql kommando
            Dim insertMenySql As New MySqlCommand(sporringMeny, db)

            'Spørringen utføres
            da.SelectCommand = insertMenySql
            'tabellen fylles
            da.Fill(interntabell)

            'Kode for å ta vare på variabelen som ble opprettet i meny. Denne brukes senere i koden
            'Teksten for spørringen legges inn i en variabel
            idVariabel = "SELECT LAST_INSERT_ID()"

            'Teksten omgjøres til SQL kommando
            Dim insertIDverdi As New MySqlCommand(idVariabel, db)

            'Kommandoen ovenfor blir valgt og utført
            da.SelectCommand = insertIDverdi
            da.Fill(interntabell)

            'Her hentes ut siste opprettet ID fra meny. 
            'Denne brukes for å knyttet riktige ingredienser til riktig meny
            Dim verdi As DataRow
            For Each verdi In interntabell.Rows
                idVariabel = verdi("LAST_INSERT_ID()")
            Next

            'Løkke for å hente ut alle ingredienser fra matriser 
            Do While i < listeTeller 'listeteller er (som nevnt ovenfor) antallet ingredienser 

                'Spørring for å opprette nye ingredienser, med sine måleenheter
                sporringIng = "INSERT INTO INGREDIENSER"
                sporringIng = sporringIng & " (ing_id, ing_navn, maaleenhet) "
                sporringIng = sporringIng & " VALUES "
                sporringIng &= "('', '" & ingrediensNavn(i) & "', '" & enhetsmaaler(i) & "')"

                'Spørring for å knytte meny og ingredienser sammen.
                'De riktige ingrediense blir knyttet til riktig meny
                'Forklaring av siste linje:
                'idVariabel er ID vi hentet fra den gjeldende menyen 
                'LAST_INSERT_ID() blir altså den id som ble brukt på sist opprettet ingrediens. 
                'Antall(i) her gjennomgås matrisen for å angi antallet som skal brukes av hver ingrediens
                sporringVerdi = "INSERT INTO OPPING"
                sporringVerdi = sporringVerdi & " (meny_id, ing_id, antall) "
                sporringVerdi = sporringVerdi & " VALUES "
                sporringVerdi &= "('" & idVariabel & "', LAST_INSERT_ID(), '" & antall(i) & " ')"

                'Kommandoene utføres 
                Dim insertIngSql As New MySqlCommand(sporringIng, db)
                Dim insertVerdi As New MySqlCommand(sporringVerdi, db)


                da.SelectCommand = insertIngSql
                da.Fill(interntabell)

                da.SelectCommand = insertVerdi
                da.Fill(interntabell)

                'Teller oppdateres
                i += 1
                'Spørringen kjøres ut i listbox (Husk å slett denne senere)
                MsgBox(sporringMeny)
            Loop 'Løkken gjør seg klar til neste matrise

            'Spørringene er ferdige. Tilkoblingen lukkes.
            db.Close()
        Catch feilmelding As MySqlException
            MsgBox("feil" & feilmelding.Message)
        Finally
            db.Dispose()
        End Try
    End Sub

    Private Sub TabPage3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabPage3.Click

    End Sub
    Private Sub txtingNavn_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtingNavn.TextChanged
        ListBox1.Items.Clear()

        Dim resultat As DataTable

        resultat = Sporring("SELECT ing_navn FROM INGREDIENSER WHERE ing_navn LIKE '%" & txtingNavn.Text & "%'")

        For Each rad In resultat.Rows
            ListBox1.Items.Add(rad("ing_navn"))
        Next
    End Sub

    Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
        txtingNavn.Text = ListBox1.SelectedItem
    End Sub
End Class